perm filename PSTAT.PAS[PAS,SYS] blob
sn#474113 filedate 1979-09-12 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 (* PROGRAM PSTAT(INFILE*,OUTPUT) STATEMENT COUNT STATISTICS
C00006 00003 PROGRAM pstat(infile*,output)
C00009 00004 BEGIN (*MAIN PROGRAM*)
C00012 ENDMK
C⊗;
(* PROGRAM PSTAT(INFILE*,OUTPUT); STATEMENT COUNT STATISTICS
.
. COUNTS AND PRINTS IN READABLE FORM THE COUNTS OBTAINED BY USING THE
. PROFILE SWITCH WHEN RUNNING PASCAL PROGRAMS.
.
. THIS PROGRAM IS COMPATIBLE WITH PASCAL/PASSGO AT LOTS/SAIL
.
. WRITTEN ON THE FLY BY POLLE ZELLWEGER AND ARMANDO RODRIGUEZ.
.
. STANFORD, CA, 13-JUL-79
. -----------------------
.
.INPUT:
.-----
. INFILE: .KNT FILE PRODUCED BY RUNNING THE PROGRAM.
.OUTPUT:
.------
. OUTPUT: COUNTS CONTAINED IN INFILE, IN HUMAN-READABLE FORM.
.
.OPTION SWITCHES:
.---------------
.
. SWITCH MEANING DEFAULT
.
. [NO]ZERO PRINT THE ZERO COUNTS ALSO. OFF
. [NO]SHOW PRINT AN OUTPUT FILE. ON
. [NO]PAGE PUT PAGE MARKS IN THE OUTPUT FILE ON
. FROM:N FIRST PAGE TO PRINT 1
. TO:N LAST PAGE TO BE PRINTED MAXINT
.
.HISTORY:
.-------
. STARTED AROUND 5-JUL-79, TO DEBUG PCREF. IT WAS CALLED READIN THEN.
. IMPROVED DURING JUL-79 BY POLLE ZELLWEGER AND ARMANDO RODRIGUEZ.
.
.FUTURE PLANS:
.------------
. REPORT ON 'THE N HIGHEST COUNTS'
. ZERO COUNTS SHOWN IN FORM 'FROM..TO'
. PROCEDURE ONLY COUNTS: BY COUNT, AND BY ZEOROONLY
. WHEN PROCEDURE TIMING IS UP, PROCEDURE STATISTICS
. WHAT ELSE DO YOU WANT?
*)
PROGRAM pstat(infile*,output);
CONST
header = 'PSTAT/SAIL 0.0 13-JUL-79, FRI';
headlen = 14;
TYPE
trio = RECORD (*A LINE-PAGE NUMBER AND ITS COUNT*)
pageno: integer;
line: integer;
count: integer;
END;
VAR
infile: FILE OF trio; (*.KNT FILE*)
thisone: trio; (*THE CURRENT TRIO*)
nonzeroones,howmany: integer; (*NUMBERS OF DESCRIPTORS FOUND*)
oldpageno : integer; (*NUMBER OF PREVIOUS PAGE*)
stopit: boolean; (*TO GET TWO CHECKS IN THE WHILE*)
firstpageno,lastpageno: integer; (*TO GET ONLY SOME PAGES OF THE FILE*)
showit: boolean; (*TRUE IF IT SHOULD PRINT THE DESCRIPTORS*)
zerotoo: boolean; (*TRUE IF IT SHOULD SHOW THE ZERO-COUNT DESCRIPTORS ALSO*)
paging: boolean; (*TRUE IF PAGE MARKS REQUESTED*)
PROCEDURE init;
(*INITIALIZES SCALARS AND SETS THE BOOLEANS ACCODING TO THE SWITCHES USED*)
BEGIN (*INIT*)
howmany := 0; nonzeroones := 0;
oldpageno := 0;
showit := NOT option ('NOSHOW ');
paging := showit AND NOT option('NOPAGE ');
zerotoo := option('ZERO ');
IF option('FROM ') THEN
getoption('FROM ',firstpageno)
ELSE
firstpageno := 1;
IF option('TO ') THEN
getoption('TO ',lastpageno)
ELSE
lastpageno := maxint-1;
END (*INIT*);
BEGIN (*MAIN PROGRAM*)
settime;
write(tty,header:headlen,': PAGE');
break(tty);
init;
IF firstpageno > lastpageno THEN
message('ARE YOU TESTING ME, OR KIDING ME?')
ELSE (*NOT KIDING*)
BEGIN
reset(infile); (*GET READY*)
stopit := eof(infile);
WHILE NOT stopit DO (*GO THROUGH IT*)
BEGIN
thisone := infile↑;
WITH thisone DO
IF pageno >= firstpageno THEN (*IF NOT THERE YET, NOOP*)
BEGIN
howmany := howmany + 1; (*COUNT THEM*)
IF count > 0 THEN
nonzeroones := nonzeroones + 1;
IF pageno <> oldpageno THEN (*KEEP PAGE MARKS AND COUNTS*)
BEGIN
IF paging THEN
IF oldpageno > 0 THEN
page(output);
write(tty,pageno:3,'..');
break;
oldpageno := pageno;
END;
IF showit THEN (*PRINT THEM*)
IF (count > 0) OR zerotoo THEN
BEGIN
writeln(output,line:5,'/',pageno:2,':',count:9);
END (*IF (COUNT > 0) OR ZEROTOO*);
END (*IF THISONE↑.PAGENO > FIRSTPAGE*);
get(infile); (*READ AND CHECK TERMINATION*)
stopit := stopit OR eof(infile);
IF NOT stopit THEN
stopit := infile↑.pageno > lastpageno;
END (*WHILE NOT STOPIT*);
writeln(tty);
if howmany = 0 then
write(tty,'sorry, no marks there')
else
write(tty,howmany,' MARKS,',nonzeroones,' EXECUTED,',howmany - nonzeroones,' zeros');
writeln(tty);
timereport(ttyoutput,' ');
END (*NOT KIDING*);
END (*PCOUNT*).